#include <stdio.h>

void swap(int* a, int*b) {
    int tmp = *a;
    *a = *b;
    *b = tmp;
}

// 简单选择排序，升序，交换法
void simple_select_sort(int A[], int n) {
    // 对n-1批记录逐次进行选择（最小值）
    // 选择范围为 [i, n-1]
    for (int i = 0; i < n - 1; ++i) {
        // 最小值所在位置，默认在第一个（i处）
        // k动态记录当下扫描到的最小值位置
        int k = i; 
        // 找最小值
        for (int j = i + 1; j < n; ++j)
        {
            if(A[j] < A[k])
                k = j;
        }
        // 找到新最小值，放在无序的头部（有序的尾部），交换法
        if(k != i)
            swap(&A[i], &A[k]);
    }
}

void traverse(int A[], int n) {
    for (int i = 0; i < n; ++ i) {
        printf("%d ", A[i]);
    }
    printf("\n");
}

int main()
{
    int A[] = {3,5,27,10,20,17,4,23,2,11};
    int n = sizeof(A) / sizeof(int);
    printf("array length: %d \n", n);
    simple_select_sort(A, n);
    traverse(A, n);
}